using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._UtilityNetworkTools._Administration
{
    /// <summary>
    /// <para>Add Domain Network</para>
    /// <para>Adds a domain network to a utility network.</para>
    /// <para>将域网络添加到公共设施网络。</para>
    /// </summary>    
    [DisplayName("Add Domain Network")]
    public class AddDomainNetwork : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddDomainNetwork()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_utility_network">
        /// <para>Input Utility Network</para>
        /// <para>The utility network to which the domain network will be added.</para>
        /// <para>将域网络添加到的公共设施网络。</para>
        /// </param>
        /// <param name="_domain_network_name">
        /// <para>Domain Network Name</para>
        /// <para>The name of the new domain network. The domain network name will prefix the feature class names that are created. For example, a domain named ElectricDistribution would include a feature class named ElectricDistributionJunction.</para>
        /// <para>新域网络的名称。域网络名称将为创建的要素类名称添加前缀。例如，名为 ElectricDistribution 的域将包含名为 ElectricDistributionJunction 的要素类。</para>
        /// </param>
        /// <param name="_tier_definition">
        /// <para>Tier Definition</para>
        /// <para><xdoc>
        ///   <para>Specifies the tier definition for the new domain network.</para>
        ///   <bulletList>
        ///     <bullet_item>Hierarchical—The tier will be defined as hierarchical. In hierarchical domain networks, tiers are nested within one another, so features existing in subnetworks for a lower tier naturally participate in all higher tiers. For example, in a gas network, a valve isolation zone exists in a pressure zone, which in turn exists in a system zone. A feature in the isolation zone also exists in the pressure zone and in the system zone.</bullet_item><para/>
        ///     <bullet_item>Partitioned— The tier will be defined as partitioned. Features in partitioned domain networks only exist in one tier. The relationship between tiers is ordered and linear. Features can exist in one or multiple subnetworks in one tier.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定新域网络的层定义。</para>
        ///   <bulletList>
        ///     <bullet_item>分层 - 层将被定义为分层。在分层域网络中，层彼此嵌套，因此较低层的子网中存在的要素自然会参与所有较高层。例如，在气体管网中，阀门隔离区存在于压力区中，而压力区又存在于系统区中。隔离区中的特征也存在于压力区和系统区。</bullet_item><para/>
        ///     <bullet_item>分区 — 层将被定义为分区。分区域网络中的要素仅存在于一个层中。层之间的关系是有序的和线性的。要素可以存在于一个层中的一个或多个子网中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_subnetwork_controller_type">
        /// <para>Subnetwork Controller Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the subnetwork controller type for the new domain network.</para>
        ///   <bulletList>
        ///     <bullet_item>Subnetwork source—The subnetwork controller type is a set of sources. A source is an origin of the delivered resource. For example, in an electric system, sources of electricity are power generating stations and substations.</bullet_item><para/>
        ///     <bullet_item>Subnetwork sink—The subnetwork controller type is a set of sinks. A sink is the destination of the gathered resource.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定新域网络的子网控制器类型。</para>
        ///   <bulletList>
        ///     <bullet_item>子网源 - 子网控制器类型为一组源。源是已交付资源的源。例如，在电力系统中，电力来源是发电站和变电站。</bullet_item><para/>
        ///     <bullet_item>子网接收器 - 子网控制器类型为一组接收器。接收器是收集的资源的目标。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public AddDomainNetwork(object _in_utility_network, object _domain_network_name, _tier_definition_value? _tier_definition, _subnetwork_controller_type_value? _subnetwork_controller_type)
        {
            this._in_utility_network = _in_utility_network;
            this._domain_network_name = _domain_network_name;
            this._tier_definition = _tier_definition;
            this._subnetwork_controller_type = _subnetwork_controller_type;
        }
        public override string ToolboxName => "Utility Network Tools";

        public override string ToolName => "Add Domain Network";

        public override string CallName => "un.AddDomainNetwork";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_utility_network, _domain_network_name, _tier_definition.GetGPValue(), _subnetwork_controller_type.GetGPValue(), _domain_network_alias_name, _out_utility_network];

        /// <summary>
        /// <para>Input Utility Network</para>
        /// <para>The utility network to which the domain network will be added.</para>
        /// <para>将域网络添加到的公共设施网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Utility Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_utility_network { get; set; }


        /// <summary>
        /// <para>Domain Network Name</para>
        /// <para>The name of the new domain network. The domain network name will prefix the feature class names that are created. For example, a domain named ElectricDistribution would include a feature class named ElectricDistributionJunction.</para>
        /// <para>新域网络的名称。域网络名称将为创建的要素类名称添加前缀。例如，名为 ElectricDistribution 的域将包含名为 ElectricDistributionJunction 的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Domain Network Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _domain_network_name { get; set; }


        /// <summary>
        /// <para>Tier Definition</para>
        /// <para><xdoc>
        ///   <para>Specifies the tier definition for the new domain network.</para>
        ///   <bulletList>
        ///     <bullet_item>Hierarchical—The tier will be defined as hierarchical. In hierarchical domain networks, tiers are nested within one another, so features existing in subnetworks for a lower tier naturally participate in all higher tiers. For example, in a gas network, a valve isolation zone exists in a pressure zone, which in turn exists in a system zone. A feature in the isolation zone also exists in the pressure zone and in the system zone.</bullet_item><para/>
        ///     <bullet_item>Partitioned— The tier will be defined as partitioned. Features in partitioned domain networks only exist in one tier. The relationship between tiers is ordered and linear. Features can exist in one or multiple subnetworks in one tier.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定新域网络的层定义。</para>
        ///   <bulletList>
        ///     <bullet_item>分层 - 层将被定义为分层。在分层域网络中，层彼此嵌套，因此较低层的子网中存在的要素自然会参与所有较高层。例如，在气体管网中，阀门隔离区存在于压力区中，而压力区又存在于系统区中。隔离区中的特征也存在于压力区和系统区。</bullet_item><para/>
        ///     <bullet_item>分区 — 层将被定义为分区。分区域网络中的要素仅存在于一个层中。层之间的关系是有序的和线性的。要素可以存在于一个层中的一个或多个子网中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Tier Definition")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _tier_definition_value? _tier_definition { get; set; }

        public enum _tier_definition_value
        {
            /// <summary>
            /// <para>Hierarchical</para>
            /// <para>Hierarchical—The tier will be defined as hierarchical. In hierarchical domain networks, tiers are nested within one another, so features existing in subnetworks for a lower tier naturally participate in all higher tiers. For example, in a gas network, a valve isolation zone exists in a pressure zone, which in turn exists in a system zone. A feature in the isolation zone also exists in the pressure zone and in the system zone.</para>
            /// <para>分层 - 层将被定义为分层。在分层域网络中，层彼此嵌套，因此较低层的子网中存在的要素自然会参与所有较高层。例如，在气体管网中，阀门隔离区存在于压力区中，而压力区又存在于系统区中。隔离区中的特征也存在于压力区和系统区。</para>
            /// </summary>
            [Description("Hierarchical")]
            [GPEnumValue("HIERARCHICAL")]
            _HIERARCHICAL,

            /// <summary>
            /// <para>Partitioned</para>
            /// <para>Partitioned— The tier will be defined as partitioned. Features in partitioned domain networks only exist in one tier. The relationship between tiers is ordered and linear. Features can exist in one or multiple subnetworks in one tier.</para>
            /// <para>分区 — 层将被定义为分区。分区域网络中的要素仅存在于一个层中。层之间的关系是有序的和线性的。要素可以存在于一个层中的一个或多个子网中。</para>
            /// </summary>
            [Description("Partitioned")]
            [GPEnumValue("PARTITIONED")]
            _PARTITIONED,

        }

        /// <summary>
        /// <para>Subnetwork Controller Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the subnetwork controller type for the new domain network.</para>
        ///   <bulletList>
        ///     <bullet_item>Subnetwork source—The subnetwork controller type is a set of sources. A source is an origin of the delivered resource. For example, in an electric system, sources of electricity are power generating stations and substations.</bullet_item><para/>
        ///     <bullet_item>Subnetwork sink—The subnetwork controller type is a set of sinks. A sink is the destination of the gathered resource.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定新域网络的子网控制器类型。</para>
        ///   <bulletList>
        ///     <bullet_item>子网源 - 子网控制器类型为一组源。源是已交付资源的源。例如，在电力系统中，电力来源是发电站和变电站。</bullet_item><para/>
        ///     <bullet_item>子网接收器 - 子网控制器类型为一组接收器。接收器是收集的资源的目标。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Subnetwork Controller Type")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _subnetwork_controller_type_value? _subnetwork_controller_type { get; set; }

        public enum _subnetwork_controller_type_value
        {
            /// <summary>
            /// <para>Subnetwork source</para>
            /// <para>Subnetwork source—The subnetwork controller type is a set of sources. A source is an origin of the delivered resource. For example, in an electric system, sources of electricity are power generating stations and substations.</para>
            /// <para>子网源 - 子网控制器类型为一组源。源是已交付资源的源。例如，在电力系统中，电力来源是发电站和变电站。</para>
            /// </summary>
            [Description("Subnetwork source")]
            [GPEnumValue("SOURCE")]
            _SOURCE,

            /// <summary>
            /// <para>Subnetwork sink</para>
            /// <para>Subnetwork sink—The subnetwork controller type is a set of sinks. A sink is the destination of the gathered resource.</para>
            /// <para>子网接收器 - 子网控制器类型为一组接收器。接收器是收集的资源的目标。</para>
            /// </summary>
            [Description("Subnetwork sink")]
            [GPEnumValue("SINK")]
            _SINK,

        }

        /// <summary>
        /// <para>Domain Network Alias Name</para>
        /// <para>The alias name of the domain network. This optional parameter is used to give a more descriptive name to the domain network.</para>
        /// <para>域网络的别名。此可选参数用于为域网络提供更具描述性的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Domain Network Alias Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _domain_network_alias_name { get; set; } = null;


        /// <summary>
        /// <para>Updated Utility Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Utility Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_utility_network { get; set; }


        public AddDomainNetwork SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}